#ifndef __MYGPIO_H__
#define __MYGPIO_H__

#include "stm32f10x.h"

#define OUT_GPIO_CLK  RCC_APB2Periph_GPIOC
#define OUT_GPIO_PORT GPIOC
#define OUT_GPIO_PIN  GPIO_Pin_3

#define IN_GPIO_CLK  RCC_APB2Periph_GPIOA
#define IN_GPIO_PORT GPIOA
#define IN_GPIO_PIN  GPIO_Pin_0

#define KEY_ON    1
#define KEY_OFF   0

#define	digitalHi(p,i)		 		{p->BSRR=i;}	 
#define digitalLo(p,i)		 		{p->BRR=i;}	 
#define digitalToggle(p,i)  	{p->ODR ^=i;}

#define OUT_TOGGLE		 				digitalToggle(OUT_GPIO_PORT,OUT_GPIO_PIN)
#define OUT_OFF		     				digitalHi(OUT_GPIO_PORT,OUT_GPIO_PIN)
#define OUT_ON			   				digitalLo(OUT_GPIO_PORT,OUT_GPIO_PIN)

/*
	GPIO_Mode_AIN = 0x0,
  GPIO_Mode_IN_FLOATING = 0x04,
  GPIO_Mode_IPD = 0x28,
  GPIO_Mode_IPU = 0x48,
  GPIO_Mode_Out_OD = 0x14,
  GPIO_Mode_Out_PP = 0x10,
  GPIO_Mode_AF_OD = 0x1C,
  GPIO_Mode_AF_PP = 0x18
*/

void GPIO_Config(GPIO_TypeDef* GPIOx,uint16_t GPIO_PinX,GPIOMode_TypeDef GPIO_Mode);
void KEY_GPIO_Config(void);
uint8_t KEY_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);

#endif /* __MYGPIO_H__ */

